styleproperties: Move the style property handling code
authorBenjamin Otte <otte@redhat.com>
Sat, 21 May 2011 02:17:28 +0000 (04:17 +0200)
committerBenjamin Otte <otte@redhat.com>
Sat, 21 May 2011 20:49:43 +0000 (22:49 +0200)
... from gtkstyleproperties.c to gtkstyleproperty.c

gtk/gtkstyleproperties.c
gtk/gtkstylepropertiesprivate.h
gtk/gtkstyleproperty.c
gtk/gtkstylepropertyprivate.h

index fc65f9e04c15219310fa9fabc5b2eb169395598a..2fd806b3d240286d5088367a294a994fa9ec1641 100644 (file)
 #include <gobject/gvaluecollector.h>
 #include <cairo-gobject.h>
 
-#include "gtktypebuiltins.h"
 #include "gtkstyleprovider.h"
 #include "gtksymboliccolor.h"
-#include "gtkprivate.h"
 #include "gtkthemingengine.h"
 #include "gtkanimationdescription.h"
-#include "gtkborder.h"
 #include "gtkgradient.h"
-#include "gtk9slice.h"
 #include "gtkshadowprivate.h"
+
+#include "gtkstylepropertyprivate.h"
 #include "gtkintl.h"
 
 /**
@@ -77,8 +75,6 @@ struct GtkStylePropertiesPrivate
   GHashTable *properties;
 };
 
-static GHashTable *properties = NULL;
-
 static void gtk_style_properties_provider_init (GtkStyleProviderIface *iface);
 static void gtk_style_properties_finalize      (GObject      *object);
 
@@ -294,115 +290,6 @@ gtk_style_properties_provider_init (GtkStyleProviderIface *iface)
   iface->get_style = gtk_style_properties_get_style;
 }
 
-static void
-gtk_style_property_init (void)
-{
-  GParamSpec *pspec;
-
-  if (G_LIKELY (properties))
-    return;
-
-  /* stuff is never freed, so no need for free functions */
-  properties = g_hash_table_new (g_str_hash, g_str_equal);
-
-  /* note that gtk_style_properties_register_property() calls this function,
-   * so make sure we're sanely inited to avoid infloops */
-
-  pspec = g_param_spec_boxed ("color",
-                              "Foreground color",
-                              "Foreground color",
-                              GDK_TYPE_RGBA, 0);
-  gtk_style_param_set_inherit (pspec, TRUE);
-  gtk_style_properties_register_property (NULL, pspec);
-
-  gtk_style_properties_register_property (NULL,
-                                          g_param_spec_boxed ("background-color",
-                                                              "Background color",
-                                                              "Background color",
-                                                              GDK_TYPE_RGBA, 0));
-
-  pspec = g_param_spec_boxed ("font",
-                              "Font Description",
-                              "Font Description",
-                              PANGO_TYPE_FONT_DESCRIPTION, 0);
-  gtk_style_param_set_inherit (pspec, TRUE);
-  gtk_style_properties_register_property (NULL, pspec);
-
-  pspec = g_param_spec_boxed ("text-shadow",
-                              "Text shadow",
-                              "Text shadow",
-                              GTK_TYPE_SHADOW, 0);
-  gtk_style_param_set_inherit (pspec, TRUE);
-  gtk_style_properties_register_property (NULL, pspec);
-
-  gtk_style_properties_register_property (NULL,
-                                          g_param_spec_boxed ("margin",
-                                                              "Margin",
-                                                              "Margin",
-                                                              GTK_TYPE_BORDER, 0));
-  gtk_style_properties_register_property (NULL,
-                                          g_param_spec_boxed ("padding",
-                                                              "Padding",
-                                                              "Padding",
-                                                              GTK_TYPE_BORDER, 0));
-  gtk_style_properties_register_property (NULL,
-                                          g_param_spec_boxed ("border-width",
-                                                              "Border width",
-                                                              "Border width, in pixels",
-                                                              GTK_TYPE_BORDER, 0));
-  gtk_style_properties_register_property (NULL,
-                                          g_param_spec_int ("border-radius",
-                                                            "Border radius",
-                                                            "Border radius, in pixels",
-                                                            0, G_MAXINT, 0, 0));
-  gtk_style_properties_register_property (NULL,
-                                          g_param_spec_enum ("border-style",
-                                                             "Border style",
-                                                             "Border style",
-                                                             GTK_TYPE_BORDER_STYLE,
-                                                             GTK_BORDER_STYLE_NONE, 0));
-  gtk_style_properties_register_property (NULL,
-                                          g_param_spec_boxed ("border-color",
-                                                              "Border color",
-                                                              "Border color",
-                                                              GDK_TYPE_RGBA, 0));
-  gtk_style_properties_register_property (NULL,
-                                          g_param_spec_boxed ("background-image",
-                                                              "Background Image",
-                                                              "Background Image",
-                                                              CAIRO_GOBJECT_TYPE_PATTERN, 0));
-  gtk_style_properties_register_property (NULL,
-                                          g_param_spec_boxed ("border-image",
-                                                              "Border Image",
-                                                              "Border Image",
-                                                              GTK_TYPE_9SLICE, 0));
-  gtk_style_properties_register_property (NULL,
-                                          g_param_spec_object ("engine",
-                                                               "Theming Engine",
-                                                               "Theming Engine",
-                                                               GTK_TYPE_THEMING_ENGINE, 0));
-  gtk_style_properties_register_property (NULL,
-                                          g_param_spec_boxed ("transition",
-                                                              "Transition animation description",
-                                                              "Transition animation description",
-                                                              GTK_TYPE_ANIMATION_DESCRIPTION, 0));
-
-  /* Private property holding the binding sets */
-  gtk_style_properties_register_property (NULL,
-                                          g_param_spec_boxed ("gtk-key-bindings",
-                                                              "Key bindings",
-                                                              "Key bindings",
-                                                              G_TYPE_PTR_ARRAY, 0));
-}
-
-const GtkStyleProperty *
-_gtk_style_property_lookup (const char *name)
-{
-  gtk_style_property_init ();
-
-  return g_hash_table_lookup (properties, name);
-}
-
 /* Property registration functions */
 
 /**
@@ -421,26 +308,10 @@ void
 gtk_style_properties_register_property (GtkStylePropertyParser  parse_func,
                                         GParamSpec             *pspec)
 {
-  const GtkStyleProperty *existing;
-  GtkStyleProperty *node;
-
   g_return_if_fail (G_IS_PARAM_SPEC (pspec));
 
-  gtk_style_property_init ();
-
-  existing = _gtk_style_property_lookup (pspec->name);
-  if (existing != NULL)
-    {
-      g_warning ("Property \"%s\" was already registered with type %s",
-                 pspec->name, g_type_name (existing->pspec->value_type));
-      return;
-    }
-
-  node = g_slice_new0 (GtkStyleProperty);
-  node->pspec = pspec;
-  node->parse_func = parse_func;
-
-  g_hash_table_insert (properties, pspec->name, node);
+  _gtk_style_property_register (pspec,
+                                parse_func);
 }
 
 /**
index 3b90e6c85d87002e7593ad877a4105826e9dcde3..f4cea2d44ba26ac20a870b114edc154cf3ba792c 100644 (file)
 
 G_BEGIN_DECLS
 
-typedef struct _GtkStyleProperty GtkStyleProperty;
-
-struct _GtkStyleProperty
-{
-  GParamSpec *pspec;
-  GtkStylePropertyParser parse_func;
-};
-
-const GtkStyleProperty * _gtk_style_property_lookup        (const char         *name);
-
 const GValue * _gtk_style_properties_peek_property         (GtkStyleProperties *props,
                                                             const gchar        *prop_name,
                                                             GtkStateFlags       state);
index 39125d24c9bfbfcab14a9762b70cc1b7d6bdfbc7..022e57741ad6c19bdaba5cb7d4426f8d0ed9163a 100644 (file)
@@ -38,6 +38,7 @@
 #include "gtkgradient.h"
 #include "gtkshadowprivate.h"
 #include "gtkthemingengine.h"
+#include "gtktypebuiltins.h"
 
 typedef gboolean (* ParseFunc)        (GtkCssParser  *parser,
                                        GFile         *base,
@@ -46,6 +47,7 @@ typedef char *   (* ToStringFunc)     (const GValue  *value);
 
 static GHashTable *parse_funcs = NULL;
 static GHashTable *to_string_funcs = NULL;
+static GHashTable *properties = NULL;
 
 static void
 register_conversion_function (GType          type,
@@ -1278,3 +1280,136 @@ _gtk_css_value_to_string (const GValue *value)
 
   return g_strdup_value_contents (value);
 }
+
+static void
+gtk_style_property_init (void)
+{
+  GParamSpec *pspec;
+
+  if (G_LIKELY (properties))
+    return;
+
+  /* stuff is never freed, so no need for free functions */
+  properties = g_hash_table_new (g_str_hash, g_str_equal);
+
+  /* note that gtk_style_properties_register_property() calls this function,
+   * so make sure we're sanely inited to avoid infloops */
+
+  pspec = g_param_spec_boxed ("color",
+                              "Foreground color",
+                              "Foreground color",
+                              GDK_TYPE_RGBA, 0);
+  gtk_style_param_set_inherit (pspec, TRUE);
+  gtk_style_properties_register_property (NULL, pspec);
+
+  gtk_style_properties_register_property (NULL,
+                                          g_param_spec_boxed ("background-color",
+                                                              "Background color",
+                                                              "Background color",
+                                                              GDK_TYPE_RGBA, 0));
+
+  pspec = g_param_spec_boxed ("font",
+                              "Font Description",
+                              "Font Description",
+                              PANGO_TYPE_FONT_DESCRIPTION, 0);
+  gtk_style_param_set_inherit (pspec, TRUE);
+  gtk_style_properties_register_property (NULL, pspec);
+
+  pspec = g_param_spec_boxed ("text-shadow",
+                              "Text shadow",
+                              "Text shadow",
+                              GTK_TYPE_SHADOW, 0);
+  gtk_style_param_set_inherit (pspec, TRUE);
+  gtk_style_properties_register_property (NULL, pspec);
+
+  gtk_style_properties_register_property (NULL,
+                                          g_param_spec_boxed ("margin",
+                                                              "Margin",
+                                                              "Margin",
+                                                              GTK_TYPE_BORDER, 0));
+  gtk_style_properties_register_property (NULL,
+                                          g_param_spec_boxed ("padding",
+                                                              "Padding",
+                                                              "Padding",
+                                                              GTK_TYPE_BORDER, 0));
+  gtk_style_properties_register_property (NULL,
+                                          g_param_spec_boxed ("border-width",
+                                                              "Border width",
+                                                              "Border width, in pixels",
+                                                              GTK_TYPE_BORDER, 0));
+  gtk_style_properties_register_property (NULL,
+                                          g_param_spec_int ("border-radius",
+                                                            "Border radius",
+                                                            "Border radius, in pixels",
+                                                            0, G_MAXINT, 0, 0));
+  gtk_style_properties_register_property (NULL,
+                                          g_param_spec_enum ("border-style",
+                                                             "Border style",
+                                                             "Border style",
+                                                             GTK_TYPE_BORDER_STYLE,
+                                                             GTK_BORDER_STYLE_NONE, 0));
+  gtk_style_properties_register_property (NULL,
+                                          g_param_spec_boxed ("border-color",
+                                                              "Border color",
+                                                              "Border color",
+                                                              GDK_TYPE_RGBA, 0));
+  gtk_style_properties_register_property (NULL,
+                                          g_param_spec_boxed ("background-image",
+                                                              "Background Image",
+                                                              "Background Image",
+                                                              CAIRO_GOBJECT_TYPE_PATTERN, 0));
+  gtk_style_properties_register_property (NULL,
+                                          g_param_spec_boxed ("border-image",
+                                                              "Border Image",
+                                                              "Border Image",
+                                                              GTK_TYPE_9SLICE, 0));
+  gtk_style_properties_register_property (NULL,
+                                          g_param_spec_object ("engine",
+                                                               "Theming Engine",
+                                                               "Theming Engine",
+                                                               GTK_TYPE_THEMING_ENGINE, 0));
+  gtk_style_properties_register_property (NULL,
+                                          g_param_spec_boxed ("transition",
+                                                              "Transition animation description",
+                                                              "Transition animation description",
+                                                              GTK_TYPE_ANIMATION_DESCRIPTION, 0));
+
+  /* Private property holding the binding sets */
+  gtk_style_properties_register_property (NULL,
+                                          g_param_spec_boxed ("gtk-key-bindings",
+                                                              "Key bindings",
+                                                              "Key bindings",
+                                                              G_TYPE_PTR_ARRAY, 0));
+}
+
+const GtkStyleProperty *
+_gtk_style_property_lookup (const char *name)
+{
+  gtk_style_property_init ();
+
+  return g_hash_table_lookup (properties, name);
+}
+
+void
+_gtk_style_property_register (GParamSpec             *pspec,
+                              GtkStylePropertyParser  parse_func)
+{
+  const GtkStyleProperty *existing;
+  GtkStyleProperty *node;
+
+  gtk_style_property_init ();
+
+  existing = _gtk_style_property_lookup (pspec->name);
+  if (existing != NULL)
+    {
+      g_warning ("Property \"%s\" was already registered with type %s",
+                 pspec->name, g_type_name (existing->pspec->value_type));
+      return;
+    }
+
+  node = g_slice_new0 (GtkStyleProperty);
+  node->pspec = pspec;
+  node->parse_func = parse_func;
+
+  g_hash_table_insert (properties, pspec->name, node);
+}
index 3db8e5480e91989c0accf0a14393c2caefa31b66..57dd0d98df874455307ad47f422d2c34ce19dd2c 100644 (file)
 
 G_BEGIN_DECLS
 
+typedef struct _GtkStyleProperty GtkStyleProperty;
+
+struct _GtkStyleProperty
+{
+  GParamSpec             *pspec;
+  GtkStylePropertyParser  parse_func;
+};
+
+const GtkStyleProperty * _gtk_style_property_lookup        (const char         *name);
+
+void                     _gtk_style_property_register      (GParamSpec             *pspec,
+                                                            GtkStylePropertyParser  parse_func);
+
 gboolean                _gtk_css_value_parse              (GValue        *value,
                                                            GtkCssParser  *parser,
                                                            GFile         *base);